package user

import (
	"context"

	"github.com/infraboard/mcube/v2/ioc"
)

const AppName = "user"

// 获取实现
func GetService() Service {
	return ioc.Controller().Get(AppName).(Service)
}

type Service interface {
	AdminService
	UserService
}

type AdminService interface {
	// 修改用户状态 --> 管理员专用
	UpdateUserStatus(context.Context, *UpdateUserStatusRequest) (*User, error)
	// 查询某个具体的用户
	DescribeUser(context.Context, *DescribeUserStatusRequest) (*User, error)
}

// userid or username
type DescribeUserStatusRequest struct {
	DescribeBy DESCRIBE_BY `json:"describe_by"`
	Value      string      `json:"value"`
}

type UserService interface {
	//注册
	Registry(context.Context, *RegistryRequest) (*User, error)

	// 用户更新
	// 密码更新，安全等级较弱，因为用户已经提供了原来的密码
	UpdatePassword(context.Context, *UpdatePasswordRequest) (*User, error)
	// 忘了密码，需要重置，安全等级较高
	ResetPassword(context.Context, *ResetPasswordRequest) error
	// 用户 profile 信息更新，邮箱之类的
	UpdateProfile(context.Context, *UpdateProfileRequest) (*User, error)

	//注销
	UnRegistry(context.Context, *UnRegistryRequest)
}

type UpdateUserStatusRequest struct {
	UserId string `json:"user_id"`
	Status
}
type UpdateProfileRequest struct {
	UserId string `json:"user_id"`
	// 需要更新的信息
	Profile
	// Status
}

type UpdatePasswordRequest struct {
	// 用户名
	UserName    string `json:"user_name"`
	OldPassword string `json:"old_password"`
	NewPassword string `json:"new_password"`
}

type ResetPasswordRequest struct {
	UserNmae    string `json:"user_name"`
	NewPassword string `json:"new_password"`
	VerifyCode  string `json:"verify_code"`
}

type UnRegistryRequest struct {
	UserNmae string `json:"username"`
}
